package com.briup.corejava.day09.pojo;

import java.util.Locale;

/**
 * 外部类
 */
public class Outer {
    private String s;
    private static int a;

    public void visitMemberInner(){
        // 外部类使用内部类的成员，只需要创建内部类对象即可
        MemberInner memberInner = new MemberInner();
        System.out.println(memberInner.s);
        memberInner.mRun("成员");
    }
    public static void visitStaticInner(){
        // 外部类访问静态内部类成员的内容，只需要创建对象
        StaticInner si = new StaticInner();
        System.out.println(si.s);
        si.sRun();
        System.out.println(StaticInner.a);
        StaticInner.ssRun();
    }

    // 成员内部类
    public class MemberInner{
        private String s;
        public void mRun(String s){
            this.s = s;
            Outer.this.s = this.s;
            System.out.println(Outer.a);
            System.out.println("成员内部类中的非静态方法");
        }
    }
    // 静态内部类
    public static class StaticInner{
        private String s;
        private static int a;
        public void sRun(){
            System.out.println(Outer.a);
            Outer.visitStaticInner();
            System.out.println("静态内部类中的非静态方法");
        }
        public static void ssRun(){
            System.out.println("静态内部类中的静态方法");
        }
    }
    // 局部内部类
    public void showLocal(){

        final int[] a = {10};

        class LocalInner{
            private String s;
            public void lRun(){
                a[0] = 20;
                System.out.println(Outer.this.s);
                // 调用外部类的非静态方法
                Outer.this.visitMemberInner();
                System.out.println(Outer.a);
                // 调用外部类的静态方法
                Outer.visitStaticInner();
            }
        }
        // 局部内部类创建对象必须在同方法中，类声明之后，才能访问到
        LocalInner localInner = new LocalInner();
        localInner.lRun();
        System.out.println(localInner.s);
    }
}
